package cn.shaoxiongdu.sx.common.utils.web.model.vo.base;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @Author 杜少雄 (email@shaoxiongdu.cn)
 * @CreateDate 2025/7/30 11:06
 * @CopyRight (C) CopyRight 杜少雄 2025
 * @Description 通用http响应基类
 */
@Data
@AllArgsConstructor
public class R<T> {

    /**
     * 响应状态码
     */
    private int code;

    /**
     * 响应状态消息
     */
    private String message;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 响应状态
     */
    private boolean success;

    /**
     * 成功
     * @param data 数据
     * @param <T> 数据类型
     */
    public static <T> R<T> success(T data) {
        return new R<>(REnum.SUCCESS.getCode(), REnum.SUCCESS.getMessage(), data, true);
    }

    /**
     * 错误
     * @param code 状态码
     * @param message 状态消息
     */
    public static <T> R<T> error(int code, String message) {
        return new R<>(code, message, null, false);
    }

    /**
     * 错误
     * @param REnum 状态枚举
     */
    public static <T> R<T> error(REnum REnum) {
        return new R<>(REnum.getCode(), REnum.getMessage(), null, false);
    }

    /**
     * 错误
     * @param t 异常
     */
    public static <T> R<T> error(Throwable t) {
        return new R<>(REnum.SERVER_ERROR.getCode(), t.getMessage(), null, false);
    }

}
